package mixing

import (
	"net/http"

	"gitee.com/wangshh_123/cross-pay-go/src/models"
	"gitee.com/wangshh_123/cross-pay-go/src/service"
	"gitee.com/wangshh_123/cross-pay-go/src/utils/common"

	"github.com/gin-gonic/gin"
)

// UserRoleController 用户角色控制器
type UserRoleController struct {
	userService *service.UserService
}

// NewUserRoleController 创建用户角色控制器
func NewUserRoleController() *UserRoleController {
	return &UserRoleController{
		userService: service.NewUserService(),
	}
}

// CreateUserRole 创建用户角色关联
// @Summary 创建用户角色关联
// @Description 创建新的用户角色关联
// @Tags 用户角色管理
// @Accept json
// @Produce json
// @Param request body models.UserRole true "用户角色信息"
// @Success 200 {object} models.UserRole "创建成功"
// @Failure 400 {object} utils.Response "请求参数错误"
// @Failure 500 {object} utils.Response "服务器内部错误"
// @Router /api/v1/admin/user-roles [post]
func (c *UserRoleController) CreateUserRole(ctx *gin.Context) {
	var userRole models.UserRole
	if err := ctx.ShouldBindJSON(&userRole); err != nil {
		common.Error(ctx, http.StatusBadRequest, "invalid_params", err)
		return
	}

	// 验证用户是否存在
	if err := c.userService.ValidateUserExists(userRole.UserID); err != nil {
		common.Error(ctx, http.StatusBadRequest, "user_not_found", err)
		return
	}

	// 验证角色是否存在
	if err := c.userService.ValidateRoleExists(userRole.RoleID); err != nil {
		common.Error(ctx, http.StatusBadRequest, "role_not_found", err)
		return
	}

	// 创建用户角色关联
	if err := c.userService.CreateUserRole(&userRole); err != nil {
		common.Error(ctx, http.StatusInternalServerError, "create_user_role_failed", err)
		return
	}

	common.Success(ctx, userRole)
}

// DeleteUserRole 删除用户角色关联
// @Summary 删除用户角色关联
// @Description 删除指定的用户角色关联
// @Tags 用户角色管理
// @Accept json
// @Produce json
// @Param id path int true "用户角色关联ID"
// @Success 200 {object} utils.Response "删除成功"
// @Failure 400 {object} utils.Response "请求参数错误"
// @Failure 500 {object} utils.Response "服务器内部错误"
// @Router /api/v1/admin/user-roles/{id} [delete]
func (c *UserRoleController) DeleteUserRole(ctx *gin.Context) {
	id := ctx.Param("id")
	if err := c.userService.DeleteUserRole(id); err != nil {
		common.Error(ctx, http.StatusInternalServerError, "delete_user_role_failed", err)
		return
	}

	common.Success(ctx, gin.H{
		"message": "user_role_deleted",
	})
}

// GetUserRoles 获取用户角色列表
// @Summary 获取用户角色列表
// @Description 获取指定用户的所有角色
// @Tags 用户角色管理
// @Accept json
// @Produce json
// @Param user_id query int true "用户ID"
// @Success 200 {array} models.UserRole "角色列表"
// @Failure 400 {object} utils.Response "请求参数错误"
// @Failure 500 {object} utils.Response "服务器内部错误"
// @Router /api/v1/admin/user-roles [get]
func (c *UserRoleController) GetUserRoles(ctx *gin.Context) {
	userID := ctx.Query("user_id")
	if userID == "" {
		common.Error(ctx, http.StatusBadRequest, "user_id_required", nil)
		return
	}

	roles, err := c.userService.GetUserRoles(userID)
	if err != nil {
		common.Error(ctx, http.StatusInternalServerError, "get_user_roles_failed", err)
		return
	}

	common.Success(ctx, roles)
}
